"""获取每一个剧类中全部数据的页面连接"""
import json
import time
from selenium import webdriver
import requests
from lxml import etree
import redis
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

with open('../json/bilibili_home.json', 'r') as f:
    all_data = json.loads(f.read())  # 读取json文件中的所有数据

redis_client = redis.StrictRedis()  # 创建redis数据库连接


def browser_set(url):
    """使用selenium配置浏览器对象
    :params url:难以处理的url网址
    return:返回改网址的页面源码"""
    # 设置 Chrome 浏览器选项
    chrome_options = Options()
    chrome_options.add_argument("--headless")  # 在后台运行浏览器
    chrome_options.add_argument("--disable-gpu")  # 在 Windows 上运行时可以加速
    chrome_options.add_argument("--no-sandbox")  # 如果遇到权限问题，可以加上这个参数
    # 创建 Chrome 浏览器对象
    path = '../chromedriver.exe'  # 确保这个路径本地的 chromedriver.exe 文件
    # 创建 Service 对象并指定 chromedriver 路径
    service = Service(executable_path=path)
    # 使用 Service 对象启动浏览器
    browser = webdriver.Chrome(service=service, options=chrome_options)
    # 访问页面
    browser.get(url)
    return browser.page_source


def bilibili_classify():
    """实现剧集类和视频类的分类"""
    header = {
        
    }  # 请求头配置
    # 动漫类
    anime = []
    # 影视类
    film = []
    # 散装类
    bulk = []
    # 遍历数据
    for result in all_data:
        title, url = result['title'], result['href']
        print(title)
        try:
            time.sleep(1)
            # 请求对应的网址
            if title == '公开课':
                # 修改这里，确保获取的是页面源代码，而不是浏览器对象
                html = browser_set(url)
            else:
                response = requests.get(url, headers=header)
        except Exception as e:
            print(e)

        if title != "公开课":
            # 其他页面使用 requests 获取的内容
            html = response.content.decode('utf-8')  # 使用 decode 解码为字符串
        root = etree.HTML(html)  # 解析html文件

        # 番剧类链接获取
        anime_list = root.xpath('')
        # 影视类链接获取
        film_list = root.xpath('')
        # 散装视频链接获取
        bulk_list = root.xpath('')
        bulk_url = root.xpath('')

        if title == '公开课':
            print(bulk_list, bulk_url)

        if anime_list:
            # 动漫类
            data = get_datas(anime, anime_list, title)
            print(data)
			# 将数据推入redis 数据库中
            redis_client.lpush('', json.dumps(data, ensure_ascii=False))
        elif film_list:
            # 影视类
            data = get_datas(film, film_list, title)
            print(data)
            redis_client.lpush('', json.dumps(data, ensure_ascii=False))
        elif bulk_list:
            for i in range(len(bulk_list)):
                try:
                    if bulk_list[i] == "热门":
                        continue  # 跳过本次循环
                    data = {
                        'title': title,
                        'classify': bulk_list[i],
                        'url': "https:" + bulk_url[i]
                    }
                except Exception as e:
                    print(e, "超出索引范围")
                    break  # 结束这个循环
                print(data)
                bulk.append(data)
                redis_client.rpush('', json.dumps(data, ensure_ascii=False))

    # 将数据写到Json文件中以备不时之需
    with open('../json/bilibili_anime.json', 'a') as f:
        f.write(json.dumps(anime, ensure_ascii=False, indent=4))
    with open('../json/bilibili_film.json', 'a') as f:
        f.write(json.dumps(film, ensure_ascii=False, indent=4))
    with open('../json/bilibili_bulk.json', 'a') as f:
        f.write(json.dumps(bulk, ensure_ascii=False, indent=4))


def get_datas(lst: list, data_lst: list, title):
    """获取数据
    :params lst:存入数据的列表
    :params data_lst:传入用于操作的列表
    :params title:传入的标题
    :return :返回一个字典结果
    """
    data = {
        "title": title,
        "detail_url": "https" + data_lst[0]
    }
    lst.append(data)
    return data


# if __name__ == '__main__':
#     bilibili_classify()
